1 module hip.windowing.platforms.x11lib.glx; 2 import hip.windowing.platforms.x11lib.x11; 3 4 version(X11): 5 6 alias GLint = int; 7 alias GLubyte = ubyte; 8 alias GLXPixmap = XID; 9 alias GLXDrawable = XID; 10 /* GLX 1.3 and later */ 11 struct __GLXcontextRec; 12 alias GLXContext = __GLXcontextRec*; 13 struct __GLXFBConfigRec; 14 alias GLXFBConfig = __GLXFBConfigRec*; 15 alias GLXFBConfigID = XID; 16 alias GLXContextID = XID; 17 alias GLXWindow = XID; 18 alias GLXPbuffer = XID; 19 20 21 enum GLX_USE_GL = 1; 22 enum GLX_BUFFER_SIZE = 2; 23 enum GLX_LEVEL = 3; 24 enum GLX_RGBA = 4; 25 enum GLX_DOUBLEBUFFER = 5; 26 enum GLX_STEREO = 6; 27 enum GLX_AUX_BUFFERS = 7; 28 enum GLX_RED_SIZE = 8; 29 enum GLX_GREEN_SIZE = 9; 30 enum GLX_BLUE_SIZE = 10; 31 enum GLX_ALPHA_SIZE = 11; 32 enum GLX_DEPTH_SIZE = 12; 33 enum GLX_STENCIL_SIZE = 13; 34 enum GLX_ACCUM_RED_SIZE = 14; 35 enum GLX_ACCUM_GREEN_SIZE = 15; 36 enum GLX_ACCUM_BLUE_SIZE = 16; 37 enum GLX_ACCUM_ALPHA_SIZE = 17; 38 39 enum GLX_SAMPLE_BUFFERS = 0x186a0; /*100000*/ 40 enum GLX_SAMPLES = 0x186a1; /*100001*/ 41 42 43 /* 44 * GLX 1.3 and later: 45 */ 46 enum GLX_CONFIG_CAVEAT = 0x20; 47 enum GLX_DONT_CARE = 0xFFFFFFFF; 48 enum GLX_X_VISUAL_TYPE = 0x22; 49 enum GLX_TRANSPARENT_TYPE = 0x23; 50 enum GLX_TRANSPARENT_INDEX_VALUE = 0x24; 51 enum GLX_TRANSPARENT_RED_VALUE = 0x25; 52 enum GLX_TRANSPARENT_GREEN_VALUE = 0x26; 53 enum GLX_TRANSPARENT_BLUE_VALUE = 0x27; 54 enum GLX_TRANSPARENT_ALPHA_VALUE = 0x28; 55 enum GLX_WINDOW_BIT = 0x00000001; 56 enum GLX_PIXMAP_BIT = 0x00000002; 57 enum GLX_PBUFFER_BIT = 0x00000004; 58 enum GLX_AUX_BUFFERS_BIT = 0x00000010; 59 enum GLX_FRONT_LEFT_BUFFER_BIT = 0x00000001; 60 enum GLX_FRONT_RIGHT_BUFFER_BIT = 0x00000002; 61 enum GLX_BACK_LEFT_BUFFER_BIT = 0x00000004; 62 enum GLX_BACK_RIGHT_BUFFER_BIT = 0x00000008; 63 enum GLX_DEPTH_BUFFER_BIT = 0x00000020; 64 enum GLX_STENCIL_BUFFER_BIT = 0x00000040; 65 enum GLX_ACCUM_BUFFER_BIT = 0x00000080; 66 enum GLX_NONE = 0x8000; 67 enum GLX_SLOW_CONFIG = 0x8001; 68 enum GLX_TRUE_COLOR = 0x8002; 69 enum GLX_DIRECT_COLOR = 0x8003; 70 enum GLX_PSEUDO_COLOR = 0x8004; 71 enum GLX_STATIC_COLOR = 0x8005; 72 enum GLX_GRAY_SCALE = 0x8006; 73 enum GLX_STATIC_GRAY = 0x8007; 74 enum GLX_TRANSPARENT_RGB = 0x8008; 75 enum GLX_TRANSPARENT_INDEX = 0x8009; 76 enum GLX_VISUAL_ID = 0x800B; 77 enum GLX_SCREEN = 0x800C; 78 enum GLX_NON_CONFORMANT_CONFIG = 0x800D; 79 enum GLX_DRAWABLE_TYPE = 0x8010; 80 enum GLX_RENDER_TYPE = 0x8011; 81 enum GLX_X_RENDERABLE = 0x8012; 82 enum GLX_FBCONFIG_ID = 0x8013; 83 enum GLX_RGBA_TYPE = 0x8014; 84 enum GLX_COLOR_INDEX_TYPE = 0x8015; 85 enum GLX_MAX_PBUFFER_WIDTH = 0x8016; 86 enum GLX_MAX_PBUFFER_HEIGHT = 0x8017; 87 enum GLX_MAX_PBUFFER_PIXELS = 0x8018; 88 enum GLX_PRESERVED_CONTENTS = 0x801B; 89 enum GLX_LARGEST_PBUFFER = 0x801C; 90 enum GLX_WIDTH = 0x801D; 91 enum GLX_HEIGHT = 0x801E; 92 enum GLX_EVENT_MASK = 0x801F; 93 enum GLX_DAMAGED = 0x8020; 94 enum GLX_SAVED = 0x8021; 95 enum GLX_WINDOW = 0x8022; 96 enum GLX_PBUFFER = 0x8023; 97 enum GLX_PBUFFER_HEIGHT = 0x8040; 98 enum GLX_PBUFFER_WIDTH = 0x8041; 99 enum GLX_RGBA_BIT = 0x00000001; 100 enum GLX_COLOR_INDEX_BIT = 0x00000002; 101 enum GLX_PBUFFER_CLOBBER_MASK = 0x08000000; 102 103 104 enum GLX_CONTEXT_MAJOR_VERSION_ARB = 0x2091; 105 enum GLX_CONTEXT_MINOR_VERSION_ARB = 0x2092; 106 enum GLX_CONTEXT_FLAGS_ARB = 0x2094; 107 enum GLX_CONTEXT_PROFILE_MASK_ARB = 0x9126; 108 109 enum GLX_CONTEXT_DEBUG_BIT_ARB = 0x0001; 110 enum GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB = 0x000; 111 enum GLX_CONTEXT_CORE_PROFILE_BIT_ARB = 0x00000001; 112 enum GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB = 0x00000002; 113 114 alias glXCreateContextAttribsARBProc = extern(C) nothrow @nogc GLXContext function(Display*, GLXFBConfig, GLXContext, Bool, const(int)*); 115 alias glXSwapIntervalEXTProc = extern(C) nothrow @nogc void function(Display *dpy, GLXDrawable drawable, int interval); 116 alias glXSwapIntervalSGIProc = extern(C) nothrow @nogc int function(int interval); 117 alias glXSwapIntervalMESAProc = extern(C) nothrow @nogc int function(int interval); 118 119 glXSwapIntervalEXTProc glXSwapIntervalEXT; 120 glXSwapIntervalMESAProc glXSwapIntervalMESA; 121 glXSwapIntervalSGIProc glXSwapIntervalSGI; 122 123 ///https://www.khronos.org/opengl/wiki/Tutorial:_OpenGL_3.0_Context_Creation_(GLX) 124 nothrow @system @nogc 125 bool isExtensionSupported(const char *extList, const char *extension) 126 { 127 import core.stdc.string; 128 const(char)* start; 129 const(char)* where, terminator; 130 131 /* Extension names should not have spaces. */ 132 where = strchr(extension, ' '); 133 if (where || *extension == '\0') 134 return false; 135 136 /* It takes a bit of care to be fool-proof about parsing the 137 OpenGL extensions string. Don't be fooled by sub-strings, 138 etc. */ 139 for (start=extList;;) 140 { 141 where = strstr(start, extension); 142 143 if (!where) 144 break; 145 146 terminator = where + strlen(extension); 147 148 if ( where == start || *(where - 1) == ' ' ) 149 if ( *terminator == ' ' || *terminator == '\0' ) 150 return true; 151 152 start = terminator; 153 } 154 155 return false; 156 }